﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed

#pragma once

#include "GcmpModelInterface.h"

namespace gcmp
{
    class IElementVisibilityFilter;

    /// \brief Element可见性过滤器管理器
    /// 
    /// 通过过滤器设置 Element 文档级的可见性，这些可见性设置不会序列化
    class GCMP_MODEL_INTERFACE_EXPORT IElementVisibilityFilterManager
    {
    public:
        /// \brief 虚析构
        virtual ~IElementVisibilityFilterManager();

        /// \brief 添加Element可见性过滤器
        /// \param opFilter Element可见性过滤器
        /// \return true-添加成功，false-添加失败（包括：opFilter为空、过滤器名字为空、同名过滤器已存在）
        virtual bool AddElementVisibilityFilter(OwnerPtr<IElementVisibilityFilter> opFilter) = 0;

        /// \brief 删除Element可见性过滤器
        /// \param filterName Element可见性过滤器的名字
        /// \return true-删除成功，false-删除失败（过滤器不存在）
        virtual bool DeleteElementVisibilityFilter(const std::wstring& filterName) = 0;

        /// \brief 获取Element可见性过滤器
        /// \param filterName Element可见性过滤器名字
        /// \return 名为 filterName 的Element可见性过滤器，如果不存在就返回 nullptr
        virtual const IElementVisibilityFilter* GetElementVisibilityFilter(const std::wstring& filterName) const = 0;

        /// \brief 获取Element可见性过滤器
        /// \param filterName Element可见性过滤器的名字
        /// \return 名为 filterName 的Element可见性过滤器，如果不存在就返回 nullptr
        virtual IElementVisibilityFilter* GetElementVisibilityFilter(const std::wstring& filterName) = 0;

        /// \brief 获取管理器中所有的Element可见性过滤器
        /// \return 所有的Element可见性过滤器
        virtual std::vector<const IElementVisibilityFilter*> GetAllElementVisibilityFilters() const = 0;

        /// \brief 获取管理器中所有的Element可见性过滤器
        /// \return 所有的Element可见性过滤器
        virtual std::vector<IElementVisibilityFilter*> GetAllElementVisibilityFilters() = 0;
    };

}

